package com.example.function.integration.controller;

import com.alibaba.fastjson2.util.DateUtils;
import com.example.function.integration.service.AccountFileGenerationService;
import org.apache.commons.lang3.ObjectUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.util.Date;


/**
 * @author ext.fengcheng
 * @Description: 账务文件生成控制层
 * @ClassName: AccountFileGenerationController
 * @Author: ext.fengcheng
 * @Create: 2023-08-08 12:09
 * @date 2023-11-20 10:25
 */
@RestController
@RequestMapping("/accountFile")
public class AccountFileGenerationController {

    @Resource
    private AccountFileGenerationService accountFileGenerationService;

    public static Logger logger = LoggerFactory.getLogger(AccountFileGenerationController.class);

    /**
     * 数据导出参数说明：
     * {"tenantId":"morse_dev_demo","fileName":"华能授信数据文件-0","queryNum":100000,"sheetNum":1000000}
     * {
     *     "tenantId": "morse_dev_demo",          租户id
     *     "fileName": "华能授信数据文件-0",         导出的文件名称
     *     "queryNum": 100000,                    每次查询多少条数据，不传则默认为50万
     *     "sheetNum": 1000000                     每个sheet页存放多少条数据，不传则默认为100万
     *     "sheetPageNum": 5                       总共存放几个sheet页，不传则默认为5个
     * }
     */
    /**
     * @Description: 根据excel文件中给定的业务场景进行生成对应的账务文件数据
     * @Author: ext.fengcheng
     * @Params: [file, file]
     * @Returns: java.lang.Boolean
     */
    @PostMapping("/generationAccountFile")
    public Boolean generationAccountFile(@RequestPart("file") MultipartFile file) {
        logger.info("generationAccountFile.根据excel文件中给定的业务场景进行生成对应的账务文件数据，开始时间：{}", DateUtils.toString(new Date()));
        if (ObjectUtils.isEmpty(file)) {
            logger.error("业务文件为空，不进行后续处理！");
            return false;
        }
        try {
            // 开始导出文件数据，处理过程中，发生异常则直接结束
            boolean result = accountFileGenerationService.generationAccountFile(file);
            if (!result) {
                logger.info("根据excel文件中给定的业务场景进行生成对应的账务文件数据失败！");
                return false;
            }
            logger.info("根据excel文件中给定的业务场景进行生成对应的账务文件数据成功，完成时间：{}", DateUtils.toString(new Date()));
            return true;
        } catch (Exception e) {
            logger.error("根据excel文件中给定的业务场景进行生成对应的账务文件数据发生异常，异常信息：{}", e.getMessage(), e);
            throw new RuntimeException(e);
        }
    }
}
